package com.appspot.abcensys.client;

import java.util.ArrayList;
import java.util.TreeMap;

import com.appspot.abcensys.shared.Afwezigheid;
import com.appspot.abcensys.shared.Gebruiker;
import com.appspot.abcensys.shared.GebruikerInstelling;
import com.appspot.abcensys.shared.Les;
import com.google.gwt.user.client.rpc.AsyncCallback;

/**
 * Async implementatie van de service
 * 
 * @author Hugo Zonderland
 * @authro Niels Timmer
 */
public interface AbcensysServiceAsync {
	
	// Installatie controle
	public void installatieModus(AsyncCallback<Boolean> callback);

	// GEBRUIKER
	public void getHuidigeGebruiker(AsyncCallback<Gebruiker> callback);
	public void getGebruikers(AsyncCallback<ArrayList<Gebruiker>> callback);
	public void addGebruiker(Gebruiker gebruiker, AsyncCallback<Gebruiker> callback);
	public void updateGebruiker(Gebruiker g, AsyncCallback<Gebruiker> callback);
	public void getGebruikerByEmail(String email, AsyncCallback<Gebruiker> callback);
	public void setHuidigeGebruiker(Gebruiker g, AsyncCallback<Void> callback);
	public void getAantalGebruikersByVakcode(String vakcode, AsyncCallback<Integer> callback);
	
	// AFWEZIGHEID
	public void getAfwezigheidVoorStudent(AsyncCallback<ArrayList<Afwezigheid>> callback);
	public void getAfwezigheidVoorDocent(AsyncCallback<TreeMap<String, ArrayList<Afwezigheid>>> callback);
	public void addAfwezigheid(ArrayList<String> lessen, String categorie, String toelichting, AsyncCallback<Boolean> callback);
	public void verwijderAfwezigheid(Afwezigheid a, AsyncCallback<Boolean> callback);
	public void verwijderAfwezigheidByIdTrancient(Long afwezigheidId, AsyncCallback<Boolean> callback);
	public void verwijderAfwezigheidByLesIdAndGebruiker(String LesId, AsyncCallback<Boolean> callback);
	public void getAlleAfwezigheidPerVak(AsyncCallback<TreeMap<String, ArrayList<Afwezigheid>>> callback);
	public void getAfwezigheidVoorStudentDashboard(AsyncCallback<TreeMap<String, ArrayList<Afwezigheid>>> callback);
	public void getAfwezigheidPerInstituut(AsyncCallback<TreeMap<String, TreeMap<Integer, Integer>>> callback);

	// LES
	public void getLesById(Long id, AsyncCallback<Les> callback);
	public void getLesRooster(AsyncCallback<TreeMap<Les, Boolean>> callback);
	public void getTotaalAantalLessenByKlasAndVakcode(String klascode, String vakcode, AsyncCallback<Integer> callback);
	
	// GEBRUIKERINSTELLING
	public void getGebruikerInstelling(AsyncCallback<GebruikerInstelling> callback);
	public void updateGebruikerInstelling(ArrayList<Boolean> instellingen, AsyncCallback<Boolean> callback);

	// LOSSE FUNCTIES
	public void getLoginUrl(AsyncCallback<String> callback);
	public void getLogoutUrl(AsyncCallback<String> callback);

	// CALENDARSERVLET
	public void getJaar(AsyncCallback<Integer> callback);
	public void getWeekNummer(AsyncCallback<Integer> callback);
	
}
